#ifndef EJERCICIO_H
#define EJERCICIO_H

#include <QExplicitlySharedDataPointer>
#include "nodoejercicio.h"

class d_Ejercicio : public QSharedData
{
public:
    d_Ejercicio() {
        nodoEjercicio = new NodoEjercicio();
    }
    d_Ejercicio(const d_Ejercicio& otro) :
        QSharedData(otro), nombre(otro.nombre), nodoEjercicio(otro.nodoEjercicio) {}

    ~d_Ejercicio() {
        if (nodoEjercicio != NULL) {
            delete nodoEjercicio;
            nodoEjercicio = NULL;
        }
    }

    QString nombre;
    NodoEjercicio* nodoEjercicio;
};

class Ejercicio
{
public:
    Ejercicio();
    Ejercicio(const Ejercicio& ejercicio);
    ~Ejercicio();

    Ejercicio(const Patron& patron);
    
	QString getNombre() const { return d->nombre; }
	void setNombre(QString nombre) { d->nombre = nombre; }

    bool esValido();

    void iniciar();
    bool haTerminado();
    Patron getSiguientePatron();

    //void serializar(QDomElement& elemento) const;
    void deserializar(const QDomElement& elemento, Proyecto* proyecto);

private:    
    QExplicitlySharedDataPointer<d_Ejercicio> d;
};

#endif // EJERCICIO_H
